Skip to content

feat: client cache for configurable list of gvks - #1042

Open
SoWieMarkus wants to merge 14 commits into
mainfrom
feat/client-cache
Open

feat: client cache for configurable list of gvks#1042
SoWieMarkus wants to merge 14 commits into
mainfrom
feat/client-cache

Conversation

@SoWieMarkus

@SoWieMarkus SoWieMarkus commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator
flowchart TB
    Ctrl["Controller"]
    CC["CachingClient\nOverlay: {namespace, name} → entry\n• live entry (write pending)\n• tombstone (delete pending)"]
    MCL["multicluster.Client\n(Routing)"]
    Home[("Home Cluster\nfoo/my-vm")]
    R1[("Remote A\nfoo/my-vm ⚠ same key!")]
    R2[("Remote B")]

    Ctrl -->|"Write → live entry\nDelete → tombstone"| CC
    CC -->|"Get: tombstone → NotFound\nGet: live entry → overlay wins"| Ctrl
    CC --> MCL
    MCL --> Home
    MCL --> R1
    MCL --> R2

    Home -. "Informer Events → evict entry/tombstone" .-> CC
    R1 -. "Informer Events → evict entry/tombstone" .-> CC
    R2 -. "Informer Events → evict entry/tombstone" .-> CC
Loading

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request adds a configurable in-process client-cache overlay with informer eviction and TTL cleanup. The manager registers the cache and routes controller, reader, reconciler, monitor, and task operations through it while retaining the multicluster client for setup.

Changes

Client cache integration

Layer / File(s) Summary
Overlay cache and client behavior
pkg/clientcache/config.go, pkg/clientcache/interfaces.go, pkg/clientcache/client.go, pkg/clientcache/client_test.go
Adds configured GVK overlays, TTL handling, serialized writes, tombstones, selector-aware reads, field indexes, status operations, and comprehensive behavior tests.
Informer eviction lifecycle
pkg/multicluster/client.go, pkg/clientcache/runnable.go
Adds multicluster informer access, informer-driven eviction for configured GVKs, and periodic TTL cleanup.
Manager and controller wiring
cmd/manager/main.go, internal/scheduling/..., helm/bundles/cortex-nova/values.yaml
Creates and registers the caching client, routes operations through it, updates controller setup parameters, registers the reservation target-host index, and configures Reservation caching.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Manager
  participant CachingClient
  participant Controllers
  participant MulticlusterClient
  participant Informers

  Manager->>CachingClient: New(inner client, scheme, config)
  Manager->>Manager: Register CachingClient
  Controllers->>CachingClient: Get, List, Create, Update, Patch, Delete
  CachingClient->>MulticlusterClient: Delegate client operation
  CachingClient-->>Controllers: Return merged overlay or inner result
  CachingClient->>MulticlusterClient: GetInformersForKind(ctx, object)
  MulticlusterClient->>Informers: Retrieve configured informers
  Informers-->>CachingClient: Resource events
  CachingClient->>CachingClient: Evict matching overlay entries
Loading

Possibly related PRs

  • cobaltcore-dev/cortex#957: The caching-client integration adapts the in-flight reservations controller introduced by this PR.
  • cobaltcore-dev/cortex#1125: The PRs both address reservation host indexing and filtered Reservation listings with client-cache support.

Suggested reviewers: arno.uhlig@sap.com, umswmayj

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: a configurable client cache for GVKs.
Description check ✅ Passed The description explains the client-cache overlay, routing behavior, tombstones, and informer-based eviction.
Docstring Coverage ✅ Passed Docstring coverage is 82.50% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/client-cache

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mblos
mblos marked this pull request as ready for review July 16, 2026 08:11

@mblos mblos left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice work :) some first comments (still not completed with reviewing)

Comment thread pkg/clientcache/cache.go Outdated
Comment thread pkg/clientcache/runnable.go
Comment thread pkg/clientcache/client.go
Comment thread pkg/clientcache/cache.go Outdated

@PhilippMatthes PhilippMatthes left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for incorporating my feedback from #1015 -- especially, the informer-cache idea and reusing metav1.Duration! I've copied over some thoughts and questions and had some new ones along the way. Thanks for considering my feedback.

Comment thread cmd/manager/main.go
Comment thread helm/bundles/cortex-nova/values.yaml
Comment thread pkg/clientcache/client.go Outdated
Comment thread pkg/clientcache/client.go
Comment thread pkg/clientcache/cache.go Outdated
Comment thread pkg/clientcache/client.go Outdated
Comment thread pkg/clientcache/client.go
Comment thread pkg/clientcache/client.go Outdated
Comment thread pkg/clientcache/runnable.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
cmd/manager/main.go (1)

520-531: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Route the inflight reservation controller through the caching client.

inflight.Controller.SetupWithManager checks that c.Client is *multicluster.Client, so Controller{Client: multiclusterClient} bypasses cachingClient. Since clientcache config enables cortex.cloud/v1alpha1/Reservation, the inflight reservation reconciler can observe informer-lagged Reservation reads while writes go directly through multiclusterClient; assign an inner caching client instead of a bare multicluster client.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmd/manager/main.go` around lines 520 - 531, Update the inflight controller
initialization in the controller setup block to pass the inner caching client
configured for Reservation resources, rather than the bare multiclusterClient.
Preserve the existing VMClient and SetupWithManager flow, and ensure the
assigned Client remains compatible with inflight.Controller’s expected
multicluster client type.
🧹 Nitpick comments (2)
pkg/clientcache/cache.go (1)

199-212: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

fieldSetLocked keeps only the first value per indexed field.

fields.Set maps one value per field, so an overlay-only object with several index values matches only one of them. The controller-runtime informer index matches any of the values. A MatchingFields query can therefore miss an overlay-only object. Match the selector against each indexed value instead of building a single fields.Set.

♻️ Proposed change to match any indexed value
-	if lo.FieldSelector != nil && !lo.FieldSelector.Empty() {
-		set := o.fieldSetLocked(gvk, obj)
-		if !lo.FieldSelector.Matches(set) {
-			return false
-		}
-	}
+	if lo.FieldSelector != nil && !lo.FieldSelector.Empty() {
+		if !o.matchesFieldsLocked(gvk, obj, lo.FieldSelector) {
+			return false
+		}
+	}
// matchesFieldsLocked reports whether any combination of indexed values for
// the GVK satisfies the selector. Callers must hold at least the read lock.
func (o *overlay) matchesFieldsLocked(gvk schema.GroupVersionKind, obj client.Object, sel fields.Selector) bool {
	for _, req := range sel.Requirements() {
		fn, ok := o.indexers[gvk][req.Field]
		if !ok {
			return false
		}
		if !slices.Contains(fn(obj), req.Value) {
			return false
		}
	}
	return true
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/cache.go` around lines 199 - 212, Replace the single-value
fieldSetLocked approach with selector matching that evaluates every indexed
value for each requirement. Add or update an overlay method such as
matchesFieldsLocked to resolve each requested field, require all selector
requirements to pass, and accept a requirement when any value returned by its
indexer matches; preserve failure for unregistered fields.
internal/scheduling/nova/hypervisor_overcommit_controller.go (1)

220-230: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Removed client validation leaves both the setup path and its test without a deterministic failure. SetupWithManager no longer validates the client it builds watches with, and the test that covered that validation now passes nil and relies on config loading failing first.

  • internal/scheduling/nova/hypervisor_overcommit_controller.go#L220-L230: add an explicit mcl == nil guard that returns errors.New("multicluster client must not be nil") before the config load.
  • internal/scheduling/nova/hypervisor_overcommit_controller_test.go#L710-L734: rename the test to describe the nil-client case and assert the specific returned error instead of accepting any error.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/nova/hypervisor_overcommit_controller.go` around lines
220 - 230, The SetupWithManager path must deterministically reject a nil
multicluster client before loading configuration. In
internal/scheduling/nova/hypervisor_overcommit_controller.go:220-230, add the
specified nil guard returning errors.New("multicluster client must not be nil");
in internal/scheduling/nova/hypervisor_overcommit_controller_test.go:710-734,
rename the test to describe the nil-client case and assert that exact error
instead of accepting any error.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmd/manager/main.go`:
- Around line 400-414: Update the index registration flow to call IndexField on
cachingClient rather than mcl, ensuring registrations populate overlay.indexers
and MatchingFields includes overlay-only objects. Locate the existing index
setup calls and route each through the clientcache wrapper while preserving
their current fields and index functions.

In `@pkg/clientcache/client.go`:
- Around line 185-189: Update the live overlay handling in Get() to deep-copy
e.obj via DeepCopyObject() before passing it to scheme.Convert, then convert the
copied object into obj. Preserve the existing conversion error propagation and
successful return behavior, ensuring callers cannot mutate the cached overlay
entry through shared maps, slices, or metadata.

In `@pkg/clientcache/runnable.go`:
- Around line 20-55: Add NeedLeaderElection() bool to CachingClient, returning
false, so its Start lifecycle—including eviction handlers and TTL cleanup—runs
on every replica regardless of leader election. Ensure AsRunnable() exposes this
method through the manager.Runnable implementation.

---

Outside diff comments:
In `@cmd/manager/main.go`:
- Around line 520-531: Update the inflight controller initialization in the
controller setup block to pass the inner caching client configured for
Reservation resources, rather than the bare multiclusterClient. Preserve the
existing VMClient and SetupWithManager flow, and ensure the assigned Client
remains compatible with inflight.Controller’s expected multicluster client type.

---

Nitpick comments:
In `@internal/scheduling/nova/hypervisor_overcommit_controller.go`:
- Around line 220-230: The SetupWithManager path must deterministically reject a
nil multicluster client before loading configuration. In
internal/scheduling/nova/hypervisor_overcommit_controller.go:220-230, add the
specified nil guard returning errors.New("multicluster client must not be nil");
in internal/scheduling/nova/hypervisor_overcommit_controller_test.go:710-734,
rename the test to describe the nil-client case and assert that exact error
instead of accepting any error.

In `@pkg/clientcache/cache.go`:
- Around line 199-212: Replace the single-value fieldSetLocked approach with
selector matching that evaluates every indexed value for each requirement. Add
or update an overlay method such as matchesFieldsLocked to resolve each
requested field, require all selector requirements to pass, and accept a
requirement when any value returned by its indexer matches; preserve failure for
unregistered fields.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 404cddc7-8f51-4e05-a9bc-9fb4f2791c3b

📥 Commits

Reviewing files that changed from the base of the PR and between a9532c8 and aa6440a.

📒 Files selected for processing (12)
  • cmd/manager/main.go
  • helm/bundles/cortex-nova/values.yaml
  • internal/scheduling/nova/hypervisor_overcommit_controller.go
  • internal/scheduling/nova/hypervisor_overcommit_controller_test.go
  • pkg/clientcache/cache.go
  • pkg/clientcache/cache_test.go
  • pkg/clientcache/client.go
  • pkg/clientcache/client_test.go
  • pkg/clientcache/config.go
  • pkg/clientcache/interfaces.go
  • pkg/clientcache/runnable.go
  • pkg/multicluster/client.go

Comment thread cmd/manager/main.go
Comment thread pkg/clientcache/client.go
Comment thread pkg/clientcache/runnable.go
Signed-off-by: Markus Wieland <markus.wieland@sap.com>
Signed-off-by: Markus Wieland <markus.wieland@sap.com>
@github-actions

Copy link
Copy Markdown
Contributor

Test Coverage Report

Test Coverage 📊: 70.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:21:							NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:39:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:45:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:37:			NewCinderAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:45:			Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:68:			GetAllStoragePools				73.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:27:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:40:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:51:			SyncAllStoragePools				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:46:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:49:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:52:			UnmarshalJSON					93.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:131:			MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:75:				Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:281:				predicateIgnoreStatusConditions			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:299:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:35:			NewIdentityAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:39:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:59:			GetAllDomains					66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:83:			GetAllProjects					72.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:26:			Init						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:41:			Sync						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:54:			SyncDomains					53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:74:			SyncProjects					53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:16:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:19:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:47:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:50:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:45:			NewLimesAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:50:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:75:			GetAllCommitments				90.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:125:			getCommitments					86.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:28:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:41:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:52:			SyncCommitments					63.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_types.go:69:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_types.go:72:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:41:			NewManilaAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:46:			Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:69:			GetAllStoragePools				75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:28:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:41:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:52:			SyncAllStoragePools				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:47:			UnmarshalJSON					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:137:			MarshalJSON					72.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:234:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:237:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:59:				NewNovaAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:64:				Init						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:95:				GetAllServers					82.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:162:				probeOSTypes					20.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:195:				probeOSType					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:209:				GetDeletedServers				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:272:				GetAllHypervisors				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:334:				GetAllFlavors					68.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:371:				GetAllMigrations				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:432:				GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:497:				initOSTypeProber				66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:30:				Init						90.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:54:				Sync						50.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:76:				isKVMFlavor					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:81:				SyncAllServers					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:104:			SyncDeletedServers				64.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:134:			SyncAllHypervisors				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:158:			SyncAllFlavors					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:180:			SyncAllMigrations				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:202:			SyncAllAggregates				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:37:			UnmarshalJSON					77.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:60:			MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:80:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:83:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:143:			UnmarshalJSON					45.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:195:			MarshalJSON					84.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:241:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:244:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:277:			UnmarshalJSON					80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:313:			MarshalJSON					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:345:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:348:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:390:			GetHypervisorType				71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:416:			UnmarshalJSON					54.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:439:			MarshalJSON					55.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:460:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:463:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:487:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:490:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:511:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:514:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:48:		NewPlacementAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:53:		Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:77:		GetAllResourceProviders				66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:105:		GetAllTraits					90.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:155:		getTraits					90.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:179:		GetAllInventoryUsages				71.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:229:		getInventoryUsages				77.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:28:		Init						87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:46:		Sync						71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:62:		SyncResourceProviders				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:83:		SyncTraits					57.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:112:		SyncInventoryUsages				57.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:17:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:20:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:31:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:34:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:74:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:77:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/supported_syncers.go:22:			getSupportedSyncer				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/controller.go:62:				Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/controller.go:216:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:32:					newTypedSyncer					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:100:					fetch						79.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:205:					getSyncWindowStart				81.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:245:					sync						68.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:295:					Sync						70.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/triggers.go:7:				TriggerMetricAliasSynced			0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/triggers.go:12:				TriggerMetricTypeSynced				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:42:					TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:43:					Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:44:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:45:					GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:46:					GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:47:					With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:90:					TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:91:					Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:92:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:93:					GetTimestamp					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:94:					GetValue					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:95:					With						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:145:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:146:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:147:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:148:				GetTimestamp					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:149:				GetValue					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:150:				With						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:170:				TableName					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:171:				Indexes						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:172:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:173:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:174:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:175:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:211:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:212:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:213:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:214:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:215:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:216:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:242:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:243:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:244:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:245:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:246:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:247:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:282:				TableName					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:285:				Indexes						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:286:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:287:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:288:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:289:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:52:								FromSecretRef					6.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:136:								SelectTimed					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:145:								CreateTable					63.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:164:								AddTable					66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:175:								TableExists					58.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:204:								ReplaceAll					62.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:233:								BulkInsert					91.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:21:								newMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:63:								Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:73:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:21:					GetPort						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:25:					Init						70.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:69:					Close						50.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/env.go:25:							SetupDBEnv					60.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/controller.go:46:							Reconcile					55.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/controller.go:238:						SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:26:							NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:44:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:50:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:69:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:78:							monitorFeatureExtractor				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:97:							Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:28:						Init						87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:45:						ExtractSQL					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:58:						Extracted					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:50:				HasFixedRamCoreRatio				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:61:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:86:				RAMUnitMiB					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:93:				DeclaredUnitsToGiB				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:97:				GiBToDeclaredUnits				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:126:				Extract						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_az.go:31:					Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_capabilities.go:35:				Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_details.go:59:				Extract						87.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_pinned_projects.go:45:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_utilization.go:47:				Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/libvirt_domain_cpu_steal_pct.go:35:		Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_host_residency.go:53:				Extract						85.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_life_span.go:52:				extractHistogramBuckets				89.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_life_span.go:97:				Extract						88.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_contention_long_term.go:39:	Extract						82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_contention_short_term.go:39:	Extract						82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_resolver.go:33:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_project_noisiness.go:33:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/storage/storage_pool_cpu_usage.go:35:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:42:							Reconcile					77.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:95:							findDependentKnowledge				96.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:142:							triggerKnowledgeReconciliation			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:175:							enqueueKnowledgeReconciliation			81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:201:							getResourceType					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:213:							mapDatasourceToKnowledge			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:234:							mapKnowledgeToKnowledge				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:255:							SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:53:							Reconcile					42.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:107:							InitAllKPIs					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:147:							getJointDB					27.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:185:							handleKPIChange					52.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:310:							handleDatasourceChange				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:335:							handleDatasourceCreated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:345:							handleDatasourceUpdated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:363:							handleDatasourceDeleted				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:375:							handleKnowledgeChange				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:400:							handleKnowledgeCreated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:410:							handleKnowledgeUpdated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:428:							handleKnowledgeDeleted				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:438:							SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:21:								Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:26:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:32:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:37:								GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/base.go:24:							Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:28:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:32:					Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:49:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:54:					Collect						82.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:27:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:31:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:43:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:47:				Collect						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:30:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:34:					Init						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:81:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:89:					convertLimesMemory				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:106:					Collect						89.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:35:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:40:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:53:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:57:					Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:29:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:33:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:46:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:50:					Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:57:					collectVMBuckets				71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:28:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:32:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:45:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:49:				Collect						69.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:47:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:52:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:71:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:78:				Collect						90.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:52:				Collect						94.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:52:				Collect						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:32:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:35:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:49:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:52:					Collect						92.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:52:		GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:54:		Init						52.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:86:		Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:92:		Collect						86.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:126:		buildObjectCountSchema				93.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:158:		parseGVK					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:173:		toSnakeCase					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/multicluster_object_count_kpi.go:186:		labelValueForSnakeKey				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:52:				Collect						92.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/reservation_state.go:44:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/reservation_state.go:47:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/reservation_state.go:61:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/reservation_state.go:64:				Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:36:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:40:			Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:52:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:56:			Collect						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:81:			getKVMHosts					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_hana_stacking.go:94:			queryHanaStacking				80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:35:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:39:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:58:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:65:			aggregateReservationsByHost			91.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:133:			getHypervisors					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:146:			Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:54:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:58:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:76:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:81:			Collect						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:127:			getKVMHosts					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:142:			queryProjectCapacityUsage			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:176:			queryProjectInstanceCount			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:32:					getHostLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:87:					getHostLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:140:					getResourceCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:157:					getResourceAllocation				83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:171:					getMetricName					75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:190:					isKVMFlavor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:209:					flavorCPUArchitecture				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:231:					bytesFromUnit					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:26:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:30:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:47:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:52:			Collect						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:82:			getVMwareHosts					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:101:			getHostUtilizations				84.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:36:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:40:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:58:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:63:		Collect						58.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:85:		getFlavorsByName				85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:98:		getGeneralPurposeCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:113:		getGeneralPurposeServers			87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:132:		getHanaInstanceCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:146:		getRunningHanaServers				87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:166:		collectGeneralPurpose				75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:224:		collectHana					89.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:289:		getProjectsWithDomains				85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:55:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:59:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:77:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:82:		Collect						66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:129:		getVMwareHosts					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:152:		queryProjectCapacityUsage			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:187:		queryProjectInstanceCount			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:28:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:32:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:49:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:54:				Collect						82.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/math/histogram.go:7:							Histogram					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/e2e_checks.go:21:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/e2e_checks.go:26:							checkCinderSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:42:					NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:57:					canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:80:					inferPipelineName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:90:					CinderExternalScheduler				71.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:48:				PipelineType					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:53:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:73:				ProcessNewDecisionFromAPI			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:96:				process						79.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:136:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:149:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/history_cleanup.go:30:						HistoryCleanup					76.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:34:							NewNovaReader					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:39:							GetAllServers					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:49:							GetAllFlavors					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:59:							GetAllHypervisors				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:69:							GetAllMigrations				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:79:							GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:89:							GetServersByProject				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:100:							GetServerByID					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:114:							GetFlavorByName					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:128:							GetDeletedServerByID				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:33:							NewPostgresReader				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:48:							DB						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:67:							Select						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:12:							NoEffect					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:15:							Norm						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:21:							Apply						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:22:							NewSchedulerMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:32:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:36:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:50:							Callback					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:56:							Respond						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:53:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:64:							Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:75:							CheckKnowledges					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:26:						NewDetectorPipelineMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:46:						SubPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:52:						Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:58:						Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:76:						monitorDetector					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:99:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:107:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:112:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:33:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:63:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:98:						Combine						97.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_step_opts.go:15:						Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter.go:31:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:23:							monitorFilter					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:36:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:41:							Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:46:							Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:22:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:28:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:33:						validateFilter					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:38:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:46:						InitNewFilterWeigherPipeline			86.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:139:					runFilters					75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:171:					runWeighers					81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:211:					normalizeInputWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:220:					applyWeights					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:256:					sortHostsByWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:266:					Run						95.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:40:					NewPipelineMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:96:					SubPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:103:				observePipelineResult				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:124:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:142:				Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:65:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:77:					IncludeAllHostsFromRequest			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:87:					PrepareStats					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:47:				monitorStep					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:71:				RunWrapped					50.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:228:				impact						94.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:297:				newPipelineStepEventCollector			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:317:				Record						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:342:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:348:				Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:370:				stepEventKey					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_opts.go:15:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:32:							joinHostsCapped					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:39:							getName						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:46:							generateExplanation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:136:							CreateOrUpdateHistory				73.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:285:							Delete						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:41:						GetPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:49:						GetPipelineConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:57:						InitAllPipelines				94.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:83:						handlePipelineChange				80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:202:						HandlePipelineCreated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:216:						HandlePipelineUpdated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:229:						HandlePipelineDeleted				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:243:						handleKnowledgeChange				71.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:276:						HandleKnowledgeCreated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:289:						HandleKnowledgeUpdated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:311:						HandleKnowledgeDeleted				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:38:						ValidateCreate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:47:						ValidateUpdate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:56:						ValidateDelete					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:65:						validatePipeline				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:149:						SetupWebhookWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/scaling.go:7:								clamp						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/scaling.go:22:								MinMaxScale					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:35:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:40:								Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:45:								CheckKnowledges					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:23:							monitorWeigher					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:36:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:41:							Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:46:							Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:22:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:28:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:33:						validateWeigher					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:38:						Run						85.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:58:						ExplainWeighing					97.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:202:						explainWithoutMultipliers			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:242:						identifyWeigherSteps				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:283:						recoverMultipliers				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:339:						solveLinearSystem				93.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:402:						computeCounterfactualRanking			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:423:						sortedMapKeys					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:52:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:56:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:76:				ProcessNewMachine				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:117:			process						79.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:178:			InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:191:			handleMachine					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:223:			SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:21:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:25:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:34:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:44:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/e2e_checks.go:34:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/e2e_checks.go:39:							checkManilaSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:42:					NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:57:					canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:80:					inferPipelineName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:90:					ManilaExternalScheduler				71.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:48:				PipelineType					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:53:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:73:				ProcessNewDecisionFromAPI			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:96:				process						79.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:136:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:149:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/history_cleanup.go:32:						HistoryCleanup					77.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:35:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:53:			Init						60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:64:			Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:110:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/candidate_gatherer.go:29:						MutateWithAllCandidates				94.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/evaluator.go:26:							BuildSlotEvaluator				77.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/evaluator.go:68:							SlotsForHost					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/evaluator.go:86:							HasUsableSlot					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/evaluator.go:109:							ReservationRemainingMemory			88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/evaluator.go:130:							PickSlot					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/metrics.go:14:							NewNoHostFoundCounter				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/metrics.go:26:							NewPlacementCounter				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/metrics.go:40:							ClassifyNoHostFound				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/metrics.go:76:							ClassifyPlacement				86.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/recorder.go:43:							resolveFlavorGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/recorder.go:58:							RecordPlacement					83.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/crs/recorder.go:173:							RecordNoHostFound				87.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:24:						Start						82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:63:						Reconcile					70.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:95:						SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_executor.go:45:						Reconcile					68.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_executor.go:256:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_cycle_breaker.go:17:						Filter						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:42:					PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:47:					InitPipeline					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:65:					CreateDeschedulingsPeriodically			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:126:					Reconcile					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:131:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:86:							getHypervisors					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:129:							prepare						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:282:							randomRequest					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:355:							checkNovaSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:389:							CheckDomainNameHintRouting			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:443:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:54:						NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:63:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:70:						canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:93:						inferPipelineName				93.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:127:					shuffleTopHosts					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:153:					limitHostsToRequest				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:175:					NovaExternalScheduler				70.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:58:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:63:				Reconcile					76.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:93:				ProcessNewDecisionFromAPI			82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:139:				upsertHistory					90.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:160:				process						84.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:228:				peekReadOnly					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:239:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:252:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/history_cleanup.go:30:						HistoryCleanup					79.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:48:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:82:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:111:				Reconcile					93.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:178:				handleRemoteHypervisor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:207:				predicateRemoteHypervisor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:220:				SetupWithManager				30.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:80:							NewNovaClient					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:84:							Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:132:							Get						75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:141:							LiveMigrate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:152:							GetServerMigrations				70.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:195:							ListProjectServers				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/pipeline_webhook.go:16:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:26:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:39:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:49:				Run						86.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:85:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_aggregate_metadata.go:24:			Run						96.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_aggregate_metadata.go:97:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_allowed_projects.go:23:			Run						90.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_allowed_projects.go:66:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:25:				hvToNovaCapabilities				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:48:				Run						89.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:137:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_correct_az.go:21:				Run						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_correct_az.go:68:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:28:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:43:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:24:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:37:			Run						95.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:103:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_accelerators.go:21:			Run						92.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_accelerators.go:58:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:35:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:65:			Run						81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:358:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_requested_traits.go:24:			Run						95.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_requested_traits.go:100:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_host_instructions.go:21:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_host_instructions.go:44:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_image_properties.go:22:			Run						92.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_image_properties.go:87:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_affinity.go:20:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_affinity.go:64:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity.go:23:		Run						89.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity.go:112:		init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:22:				checkHasSufficientFeatures			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:51:				Run						94.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:112:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement.go:33:			Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement.go:75:			Run						91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement.go:330:			quantityToGiB					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement.go:338:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement_metrics.go:40:		NewQuotaEnforcementMetrics			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement_metrics.go:57:		Describe					66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement_metrics.go:67:		Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_quota_enforcement_metrics.go:86:		RecordDecision					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:27:			processRequestedAggregates			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:80:			processRequestedHost				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:104:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:141:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_status_conditions.go:23:			Run						93.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_status_conditions.go:91:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:17:						GetResource					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:18:						GetReason					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:19:						GetHost						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:20:						WithReason					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:29:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:72:					Run						89.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:144:					calcVMResources					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:157:					init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:28:		Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:32:		GetReservationHostWeight			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:39:		GetDefaultHostWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:55:		Run						95.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:131:		freeMemoryBytes					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_committed_resource_reservation.go:144:		init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:25:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:29:			GetFailoverHostWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:36:			GetDefaultHostWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:53:			Run						93.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:114:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:29:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:47:	GetTotalCountWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:54:	GetSameSpecPenalty				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:81:	Run						94.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:160:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity.go:29:		Run						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity.go:88:		init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:29:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:60:			Run						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:157:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:29:		Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:44:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:55:		Run						81.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:93:		init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:35:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:53:	Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:64:	Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:111:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:35:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:53:	Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:64:	Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:111:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:32:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:75:				Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:88:				Run						80.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:165:				calcHostCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:177:				calcHostAllocation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:187:				calcVMResources					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:200:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:51:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:55:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:75:				ProcessNewPod					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:117:				process						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:190:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:203:				handlePod					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:235:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:12:						GetPodResourceRequests				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:31:						AddResourcesInto				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:41:						MaxResourcesInto				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:22:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:26:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:43:				matchesNodeAffinity				88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:62:				matchesNodeSelectorTerm				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:71:				matchesNodeSelectorRequirement			90.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:124:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:21:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:25:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:29:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:42:				isNodeHealthy					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:70:				isNodeSchedulable				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:74:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:22:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:26:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:45:				hasCapacityForPod				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:60:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:21:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:25:					Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:34:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:44:					init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:21:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:25:					Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:29:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:42:					canScheduleOnNode				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:53:					hasToleration					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:67:					init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:21:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:34:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:48:					calculateBinpackScore				85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:83:					init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/config.go:38:					ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/config.go:58:					Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/config.go:66:					DefaultConfig					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/context.go:15:					WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/context.go:22:					LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:88:					capacityMapsEqual				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:113:					NewController					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:125:					Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:150:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:208:					flavorSlots					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:219:					reconcileAll					86.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:263:					computeVMUsage					60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:326:					hvRemainingResources				78.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:366:					probeGroup					89.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:447:					buildSplitInputs				92.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:502:					reconcileAZ					93.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:581:					computeTotalCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:600:					writeCRD					91.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:680:					markCRDNotReady					81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:705:					probeScheduler					84.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:801:					blockedResourcesByHost				22.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:840:					sumCommittedCapacity				94.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:874:					resMapToQuantity				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:891:					availabilityZones				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:909:					crdNameFor					88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:39:					NewMonitor					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:90:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:105:					Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:30:						fits						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:44:						sortGroups					88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:62:						bestHost					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:96:						initGroupStates					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:113:					computeFreeResources				95.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:145:					copyHostResources				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:160:					allocateRoundRobin				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:202:					computeUnassigned				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:230:					collectExclusiveResources			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/split.go:258:					SplitCapacity					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity_accounting.go:27:					HostHasCapacityForReservation			96.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity_accounting.go:88:					UnusedReservationCapacity			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:33:			sortedKeys					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:66:			HandleChangeCommitments				82.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:164:			processCommitmentChanges			81.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:378:			watchCRsUntilReady				75.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:473:			rollbackCR					76.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:515:			performDryRun					76.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:685:			cleanupDryRunProbes				64.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:720:			applyCRSpec					90.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_metrics.go:15:		recordMetrics					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_metrics.go:35:		countCommitments				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_metrics.go:47:		computeNetUnitDeltas				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:17:		NewChangeCommitmentsAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:56:		Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:63:		Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:35:				NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:40:				NewAPIWithConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:53:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:72:				handleProjectEndpoint				60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:26:					HandleInfo					96.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:71:					recordInfoMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:87:					mibToGiB					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:101:					buildServiceInfo				91.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:15:				NewInfoAPIMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:36:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:41:				Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:34:					projectQuotaCRDName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:43:					HandleQuota					86.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:274:					quotaError					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:280:					recordQuotaMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:13:				NewQuotaAPIMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:32:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:37:				Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity.go:22:			unitSizeForResource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity.go:37:			HandleReportCapacity				62.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity.go:112:			recordCapacityMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:16:		NewReportCapacityAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:41:		Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:47:		Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:25:				HandleReportUsage				66.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:98:				recordUsageMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:108:				extractProjectIDFromPath			77.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:15:			NewReportUsageAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:36:			Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:41:			Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:31:					NewCapacityCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:40:					CalculateCapacity				94.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:43:					NewCommitmentsClient				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:47:					Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:107:					ListProjects					90.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:126:					ListCommitmentsByID				79.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:170:					listCommitments					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:46:		Reconcile					72.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:91:		reconcilePending				78.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:147:		reconcileCommitted				91.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:212:		reconcileCoresHeadroom				89.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:306:		applyReservationState				90.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:349:		checkChildReservationStatus			92.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:398:		setAccepted					92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:429:		reconcileInactive				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:439:		deleteChildReservations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:445:		DeleteChildReservations				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:466:		rollbackToAccepted				85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:504:		isRejectedForGeneration				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:517:		retryDelay					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:536:		setNotReady					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:543:		setNotReadyRetry				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:551:		patchNotReady					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:566:		setReadyConditionFalse				90.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:598:		SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller_monitor.go:31:	NewCRControllerMonitor				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller_monitor.go:48:	RecordSlotLimitRejection			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller_monitor.go:53:	Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller_monitor.go:60:	Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_summary.go:19:			computeStatusSummary				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_summary.go:75:			buildSpecDiff					91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_summary.go:97:			formatRemaining					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:38:					DefaultUsageReconcilerConfig			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:45:					ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:134:					RAMUnitMiB					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:142:					DeclaredUnitsToGiB				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:147:					GiBToDeclaredUnits				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:160:					LogFlavorGroupResourceConfig			91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:184:					ResourceConfigForGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:224:					ResourceConfigForGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:228:					DefaultAPIConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:20:					WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:26:					WithGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:33:					LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/domain_resolver.go:34:				newKeystoneDomainResolver			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/domain_resolver.go:43:				ResolveDomainName				92.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:54:					e2eRequestTimeout				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:73:					e2eProjectID					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:85:					e2eAZs						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:100:				CheckCommitmentsInfoEndpoint			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:137:				CheckCommitmentsRoundTrip			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:161:				e2eRoundTripResource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:260:				CheckCommitmentsMultiFlavorGroupBatch		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:284:				e2eBatchFlavorGroupResource			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:470:				CheckCommitmentsDryRun				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:494:				e2eDryRunResource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:545:				e2eFetchUsageReport				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:569:				e2eLogUsageReport				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:605:				e2eSendChangeCommitments			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:631:				e2eFetchServiceInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:649:				e2eBaseURL					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:657:				RunCommitmentsE2EChecks				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:36:				indexCommittedResourceByUUID			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:61:				indexCommittedResourceByProjectID		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:86:				indexReservationByCommitmentUUID		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:111:				indexProjectQuotaByProjectID			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:138:				indexReservationByAllocationVMUUID		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/messages.go:135:					UnmarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/messages.go:158:					MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/payg_candidates.go:31:				ScanAZForPaygCandidates				92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/payg_candidates.go:87:				buildAllocatedVMSet				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/payg_candidates.go:113:				filterPaygCandidates				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/payg_candidates.go:164:				sortCandidatesDesc				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:57:			echoParentGeneration				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:70:			Reconcile					74.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:395:			reconcileAllocations				85.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:667:			cleanupCandidateReservations			73.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:699:			getPipelineForFlavorGroup			66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:718:			hypervisorToReservations			84.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:741:			Init						23.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:815:			SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:47:			Error						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:71:			NewReservationManager				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:93:			ApplyCommitmentState				82.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:346:			syncReservationMetadata				82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:394:			selectFlavor					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:410:			countNewSlots					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:420:			newReservation					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:491:			newPaygReservation				88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:32:					ResourceNameRAM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:38:					ResourceNameCores				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:44:					ResourceNameInstances				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:51:					GetFlavorGroupNameFromResource			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:78:					GetFlavorGroupAndTypeFromResource		100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:142:					FromCommitment					82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:193:					FromChangeCommitmentTargetState			86.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:264:					FromCommittedResource				93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:305:					FromReservations				86.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:46:					ResourceConfigForGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:63:					NewSyncer					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:71:					Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:89:					getCommitmentStates				65.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:214:					SyncReservations				59.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:406:					applyCommittedResourceSpec			82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:433:					upsertCommittedResource				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:468:					updateCommittedResourceIfExists			73.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:497:					isTerminalCommitment				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:32:				NewSyncerMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:83:				RecordError					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:87:				RecordDuration					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:91:				SetLimesCommitmentsActive			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:95:				RecordStaleCRs					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:99:				RecordCommitmentSkipped				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:103:				RecordCRCreates					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:107:				RecordCRUpdates					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:111:				RecordCRDeletes					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:116:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:128:				Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:31:					NewUsageCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:48:					NewCommitmentStateWithUsage			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:57:					AssignVM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:68:					HasRemainingCapacity				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:94:					CalculateUsage					87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:152:					BuildVMAssignmentsFromStatus			87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:167:					azFlavorGroupKey				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:174:					buildCommitmentCapacityMap			78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:238:					getProjectVMs					88.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:327:					sortVMsForUsageCalculation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:346:					sortCommitmentsForAssignment			92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:375:					assignVMsToCommitments				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:401:					buildCombinedQuotaMap				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:420:					buildUsageResponse				92.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:579:					buildVMAttributes				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:607:					countCommitmentStates				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:41:				Reconcile					88.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:205:				writeUsageStatus				93.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:235:				hypervisorToCommittedResources			81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:274:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:335:				Update						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:18:			NewUsageReconcilerMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:44:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:51:			Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:13:					GetMaxSlotIndex					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:30:					GetNextSlotIndex				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:36:					extractCommitmentUUID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:20:						WithGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:26:						WithRequestID					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:32:						GlobalRequestIDFromContext			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:43:						RequestIDFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:92:					intPtr						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:97:					ApplyDefaults					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:135:					DefaultConfig					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/context.go:15:					WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/context.go:22:					LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:50:					NewFailoverReservationController		100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:72:					Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:107:					reconcileValidateAndAcknowledge			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:183:					validateReservation				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:251:					ReconcilePeriodic				71.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:413:					reconcileRemoveInvalidVMFromReservations	97.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:485:					reconcileRemoveNoneligibleVMFromReservations	93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:545:					reconcileRemoveEmptyReservations		70.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:569:					selectVMsToProcess				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:613:					sortVMsByMemory					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:627:					reconcileCreateAndAssignReservations		78.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:746:					calculateVMsMissingFailover			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:797:					getRequiredFailoverCount			81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:819:					patchReservationStatus				50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:853:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:875:					Start						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:35:					sanitizeAZForName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:58:					ResourceGroup					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:68:					HypervisorResources				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:78:					resolveVMSpecForScheduling			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:127:					getFailoverAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:135:					filterFailoverReservations			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:146:					countReservationsForVM				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:159:					addVMToReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:185:					ValidateFailoverReservationResources		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:206:					newFailoverReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:29:					NewFailoverMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:88:					preInitialize					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:105:					RecordReconciliation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:121:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:137:					Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:40:			IsVMEligibleForReservation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:65:			CheckVMsStillEligible				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:106:			FindEligibleReservations			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:140:			reservationKey					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:145:			newBaseDependencyGraph				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:175:			newDependencyGraph				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:191:			ensureVMInMaps					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:200:			ensureResInMaps					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:207:			addVMToReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:217:			removeVMFromReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:224:			checkAllVMConstraints				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:283:			isVMEligibleForReservation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:293:			doesVMFitInReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:36:			inferFailoverPipeline				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:61:			imagePropertiesFromFlavor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:75:			queryHypervisorsFromScheduler			82.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:157:			tryReuseExistingReservation			84.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:218:			validateVMViaSchedulerEvacuation		77.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:303:			scheduleAndBuildNewFailoverReservation		77.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:24:						FindFlavorInGroups				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:42:						Get						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:63:						GetAllFlavorGroups				94.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/hypervisor_diff_handler.go:23:				Create						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/hypervisor_diff_handler.go:26:				Update						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/hypervisor_diff_handler.go:32:				Delete						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/hypervisor_diff_handler.go:35:				Generic						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:61:					Reconcile					83.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:251:					handleReservations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:278:					predicateReservations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:295:					handleHypervisors				90.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:350:					predicateHypervisors				57.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/controller.go:381:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/vm_client.go:43:					NewNovaVMClient					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/vm_client.go:49:					StartWithKubernetesSecrets			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/inflight/vm_client.go:95:					GetCurrentVMSize				83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:33:						NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:48:						Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:54:						Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/config.go:35:						ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/config.go:49:						IsHVDiffEnabled					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/config.go:57:						DefaultQuotaControllerConfig			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/context.go:15:						WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/context.go:22:						LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:48:					NewQuotaController				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:70:					ReconcilePeriodic				71.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:180:					Reconcile					52.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:268:					computeTotalUsageForProject			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:302:					newUsageDelta					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:309:					addIncrement					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:316:					addDecrement					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:327:					ReconcileHVDiff					85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:407:					accumulateAddedVM				78.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:466:					isVMNewSinceLastReconcile			64.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:501:					accumulateRemovedVM				71.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:560:					applyDeltaAndUpdateStatus			80.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:655:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:675:					SetupHVWatcher					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:704:					Start						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:741:					computeTotalUsage				96.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:797:					groupCRsByProject				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:808:					computeCRUsage					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:879:					isCRStateIncluded				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:889:					derivePaygUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:919:					extractAZSlice					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:931:					expandAZSlice					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:945:					updateProjectQuotaStatusWithRetry		78.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1003:					buildUsageSummary				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1073:					buildLimesSummary				91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1096:					vmResourceUnits					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1106:					buildFlavorToGroupMap				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1117:					incrementUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1127:					decrementUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1140:					recordUsageMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1167:					mapCRToProjectQuota				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1180:					crUsedAmountChangePredicate			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1208:					projectQuotaGenerationChangePredicate		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1216:					hvInstanceChangePredicate			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:20:						NewQuotaMetrics					37.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:71:						RecordUsage					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:81:						RecordReconcileDuration				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:89:						RecordReconcileResult				83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:26:					loggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:45:					NewSchedulerClient				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:97:					ScheduleReservation				76.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:220:					getSchedulerHints				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:91:						NewDBVMSource					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:96:						ListVMs						78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:166:						ListVMsByProject				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:220:						GetVM						91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:259:						ListVMsOnHypervisors				27.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:288:						IsServerActive					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:300:						GetDeletedVMInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:330:						parseExtraSpecs					28.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:343:						truncateString					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:351:						normalizeOSType					66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:358:						buildVMsFromHypervisors				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:417:						filterVMsOnKnownHypervisors			93.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:475:						warnUnknownVMsOnHypervisors			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:535:						NewPostgresVMSource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:539:						get						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:553:						ListVMs						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:561:						ListVMsByProject				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:569:						ListVMsOnHypervisors				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:577:						GetVM						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:585:						IsServerActive					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/vm_source.go:593:						GetDeletedVMInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:72:								compileAuthPolicies				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:106:								compileRoles					94.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:140:								extractBodyField				94.1%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:184:								tokenCacheKey					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:189:								get						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:204:								put						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:208:								delete						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:246:								matchPath					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:256:								matchPolicy					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:265:								authError					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:277:								checkAuth					93.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth_keystone.go:20:							initTokenIntrospector				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth_keystone.go:67:							introspect					84.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/field_index.go:33:							IndexFields					81.8%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocation_candidates.go:35:					HandleListAllocationCandidates			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:25:						HandleManageAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:40:						HandleListAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:58:						HandleUpdateAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:70:						HandleDeleteAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_reshaper.go:25:							HandlePostReshaper				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:33:						HandleListResourceClasses			73.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:76:						HandleCreateResourceClass			61.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:129:					handleCreateResourceClassHybrid			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:169:					HandleShowResourceClass				71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:214:					HandleUpdateResourceClass			76.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:258:					handleUpdateResourceClassHybrid			81.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:296:					HandleDeleteResourceClass			78.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:342:					handleDeleteResourceClassHybrid			81.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:373:					getResourceClasses				75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:382:					parseResourceClasses				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:398:					hasResourceClass				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:408:					writeResourceClassesToConfigMap			81.8%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:429:					addResourceClassToConfigMap			56.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:496:					removeResourceClassFromConfigMap		66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:48:				HandleListResourceProviderAggregates		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:67:				listResourceProviderAggregatesHybrid		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:84:				listResourceProviderAggregatesCRD		66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:109:				writeAggregatesFromCRD				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:133:				HandleUpdateResourceProviderAggregates		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:152:				updateResourceProviderAggregatesHybrid		23.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:210:				updateResourceProviderAggregatesCRD		71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_allocations.go:18:				HandleListResourceProviderAllocations		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:19:				HandleListResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:36:				HandleUpdateResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:52:				HandleDeleteResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:66:				HandleShowResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:85:				HandleUpdateResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:102:				HandleDeleteResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:42:					HandleListResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:61:					listResourceProviderTraitsHybrid		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:78:					listResourceProviderTraitsCRD			66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:103:				writeTraitsFromCRD				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:125:				HandleUpdateResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:144:				updateResourceProviderTraitsHybrid		23.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:202:				updateResourceProviderTraitsCRD			71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:279:				HandleDeleteResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:298:				deleteResourceProviderTraitsHybrid		33.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:336:				deleteResourceProviderTraitsCRD			53.1%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_usages.go:18:					HandleListResourceProviderUsages		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:54:					translateToResourceProvider			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:114:					HandleCreateResourceProvider			67.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:209:					HandleShowResourceProvider			64.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:279:					HandleUpdateResourceProvider			71.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:375:					HandleDeleteResourceProvider			64.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:454:					HandleListResourceProviders			60.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:468:					listResourceProvidersHybrid			88.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:560:					listResourceProvidersCRD			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:589:					applyHypervisorQueryFilters			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:616:					filterHypervisorsByUUID				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:630:					filterHypervisorsByName				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:649:					filterHypervisorsByMemberOf			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:693:					filterHypervisorsByInTree			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:712:					filterHypervisorsByRequired			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:736:					matchesTraitExpr				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:778:					filterHypervisorsByResources			92.9%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:49:							HandleGetRoot					58.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:90:							staticVersionDocument				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:106:							intersectVersions				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:133:							compareVersions					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:158:							maxVersion					66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:165:							minVersion					66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:40:							HandleListTraits				83.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:112:							HandleShowTrait					71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:154:							HandleUpdateTrait				68.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:198:							handleUpdateTraitHybrid				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:236:							HandleDeleteTrait				71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:282:							handleDeleteTraitHybrid				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:313:							getTraits					75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:322:							parseTraits					80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:338:							hasTrait					80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:348:							writeTraitsToConfigMap				81.8%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:368:							addTraitToConfigMap				56.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:437:							removeTraitFromConfigMap			66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_usages.go:22:							HandleListUsages				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:85:								orDefault					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:94:								valid						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:106:								dispatchPassthroughOnly				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:125:								featureModeFromConfOrHeader			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:232:								validate					91.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:342:								Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:348:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:355:								initHTTPClient					60.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:411:								initPlacementServiceClient			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:450:								Start						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:496:								Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:502:								handleRemoteHypervisor				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:510:								predicateRemoteHypervisor			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:520:								SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:592:								forward						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:601:								forwardWithHook					72.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:691:								RegisterRoutes					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:24:								Read						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:37:								Write						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:61:								WriteHeader					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:66:								Write						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:86:								writeJSON					55.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:103:							wrapHandler					75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:52:						NewResourceClassSyncer				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:70:						Init						70.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:102:					Run						26.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:134:					sync						64.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:35:							NewTraitSyncer					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:53:							Init						70.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:85:							Run						26.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:117:							sync						64.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/validation.go:16:							requiredPathParam				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/validation.go:28:							requiredUUIDPathParam				85.7%
total:																(statements)					70.7%

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
pkg/clientcache/client.go (1)

152-155: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider collapsing the duplicate inner-client fields.

CachingClient embeds client.Client and also stores inner Client. New assigns the same value to both. The local Client interface already embeds client.Client, so embedding Client directly gives both the delegation methods and GetInformersForKind. This removes the risk that the two fields diverge.

♻️ Proposed change
 type CachingClient struct {
-	client.Client // inner client, used for delegation
+	Client // inner client, used for delegation and informer access
 
-	inner  Client
 	scheme *runtime.Scheme

Then drop the inner: inner, line in New and replace c.inner.GetInformersForKind in pkg/clientcache/runnable.go with c.GetInformersForKind.

Also applies to: 184-185

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/client.go` around lines 152 - 155, Collapse the duplicate
client fields in CachingClient by embedding the local Client interface instead
of client.Client and removing the separate inner Client field. Update New to
stop assigning inner, and change runnable.go’s c.inner.GetInformersForKind call
to c.GetInformersForKind while preserving existing delegation behavior.
pkg/clientcache/client_test.go (1)

127-127: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

deleteAllOfErr is never exercised.

No test sets deleteAllOfErr, so the field on Line 127 and the DeleteAllOf override on Lines 160-165 are unused. Either add a DeleteAllOf case to TestWriteErrorLeavesOverlayUntouched or remove both. A failure case is useful here, because DeleteAllOf in pkg/clientcache/client.go must leave every overlay entry untouched when the inner call fails.

As per coding guidelines: "Test files should be short and contain only necessary test cases".

♻️ Proposed test case
 		{
 			name:     "delete",
 			seed:     true,
 			mkClient: func(inner *fakeClient) Client { return &errClient{Client: inner, deleteErr: sentinel} },
 			op:       func(c *CachingClient, r *v1alpha1.Reservation) error { return c.Delete(context.Background(), r) },
 		},
+		{
+			name:     "deleteallof",
+			seed:     true,
+			mkClient: func(inner *fakeClient) Client { return &errClient{Client: inner, deleteAllOfErr: sentinel} },
+			op: func(c *CachingClient, r *v1alpha1.Reservation) error {
+				return c.DeleteAllOf(context.Background(), &v1alpha1.Reservation{})
+			},
+		},

Also applies to: 160-165

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/client_test.go` at line 127, Remove the unused deleteAllOfErr
field and its DeleteAllOf override from the test mock, unless you add a
meaningful DeleteAllOf failure case to TestWriteErrorLeavesOverlayUntouched that
verifies overlays remain unchanged when the inner call fails.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/clientcache/client_test.go`:
- Around line 438-462: Update TestDeleteAllOf after the DeleteAllOf call to
recreate res-dao-1 directly in the inner client, using the same approach as
TestTombstone, before calling c.Get. Keep the existing assertions so the
NotFound result verifies the cache tombstone rather than deletion from the
underlying client.

In `@pkg/clientcache/client.go`:
- Around line 512-537: Protect DeleteAllOf and single-object write paths with a
package-level sync.RWMutex: add a bulkLock field to CachingClient, acquire
bulkLock.RLock() alongside the existing writeLocks lock in Create, Update,
Patch, and Delete, and acquire bulkLock.Lock() across the inner DeleteAllOf call
and overlay mutation in DeleteAllOf. Preserve the existing per-object locking
and cleanup behavior.
- Around line 425-438: Replace the single-value fieldSetLocked matching flow
with per-requirement matching, using a matchesFieldSelectorLocked helper. For
each selector requirement, evaluate every value returned by the registered
indexer and accept the object when any value satisfies that requirement; require
all requirements to match and return false when the indexer is missing or no
value matches. Remove the first-value-only behavior and update callers to use
the new helper.

---

Nitpick comments:
In `@pkg/clientcache/client_test.go`:
- Line 127: Remove the unused deleteAllOfErr field and its DeleteAllOf override
from the test mock, unless you add a meaningful DeleteAllOf failure case to
TestWriteErrorLeavesOverlayUntouched that verifies overlays remain unchanged
when the inner call fails.

In `@pkg/clientcache/client.go`:
- Around line 152-155: Collapse the duplicate client fields in CachingClient by
embedding the local Client interface instead of client.Client and removing the
separate inner Client field. Update New to stop assigning inner, and change
runnable.go’s c.inner.GetInformersForKind call to c.GetInformersForKind while
preserving existing delegation behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 780c7525-3d2d-44d8-b1c1-bca1f04c73fa

📥 Commits

Reviewing files that changed from the base of the PR and between aa6440a and 1dd9c5c.

📒 Files selected for processing (7)
  • cmd/manager/main.go
  • internal/scheduling/reservations/inflight/controller.go
  • internal/scheduling/reservations/inflight/controller_test.go
  • pkg/clientcache/client.go
  • pkg/clientcache/client_test.go
  • pkg/clientcache/interfaces.go
  • pkg/clientcache/runnable.go
💤 Files with no reviewable changes (1)
  • internal/scheduling/reservations/inflight/controller_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • pkg/clientcache/runnable.go
  • cmd/manager/main.go

Comment on lines +438 to +462
func TestDeleteAllOf(t *testing.T) {
r1 := newReservation("res-dao-1", "az-1", "1")
r1.Labels = map[string]string{"zone": "a"}
r2 := newReservation("res-dao-2", "az-2", "1")
r2.Labels = map[string]string{"zone": "b"}
inner := newTestClient(t, r1, r2)
c := newCaching(t, inner)

// Populate overlay for both so we can verify tombstoning.
c.upsert(reservationGVK(), r1)
c.upsert(reservationGVK(), r2)

// DeleteAllOf with a label selector — only r1 should be tombstoned.
if err := c.DeleteAllOf(context.Background(), &v1alpha1.Reservation{}, client.MatchingLabels{"zone": "a"}); err != nil {
t.Fatalf("DeleteAllOf: %v", err)
}

var got v1alpha1.Reservation
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-1"}, &got); !apierrors.IsNotFound(err) {
t.Fatalf("expected NotFound for tombstoned res-dao-1, got %v", err)
}
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-2"}, &got); err != nil {
t.Fatalf("res-dao-2 should still be visible, got %v", err)
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

TestDeleteAllOf does not isolate the tombstone behaviour.

r1 exists in the inner fake client, and c.DeleteAllOf deletes it there as well. The Get on Line 456 therefore returns NotFound from the inner client regardless of the overlay. The test passes even if the tombstone loop in DeleteAllOf is removed.

Re-create res-dao-1 directly in inner after the DeleteAllOf call, the same way TestTombstone does on Line 425. The NotFound then proves the tombstone is applied.

💚 Proposed change
 	if err := c.DeleteAllOf(context.Background(), &v1alpha1.Reservation{}, client.MatchingLabels{"zone": "a"}); err != nil {
 		t.Fatalf("DeleteAllOf: %v", err)
 	}
+	// Re-create directly in inner to simulate informer lag; only the tombstone
+	// can hide the object now.
+	if err := inner.Create(context.Background(), newReservation("res-dao-1", "az-1", "")); err != nil {
+		t.Fatalf("re-create inner: %v", err)
+	}
 
 	var got v1alpha1.Reservation
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func TestDeleteAllOf(t *testing.T) {
r1 := newReservation("res-dao-1", "az-1", "1")
r1.Labels = map[string]string{"zone": "a"}
r2 := newReservation("res-dao-2", "az-2", "1")
r2.Labels = map[string]string{"zone": "b"}
inner := newTestClient(t, r1, r2)
c := newCaching(t, inner)
// Populate overlay for both so we can verify tombstoning.
c.upsert(reservationGVK(), r1)
c.upsert(reservationGVK(), r2)
// DeleteAllOf with a label selector — only r1 should be tombstoned.
if err := c.DeleteAllOf(context.Background(), &v1alpha1.Reservation{}, client.MatchingLabels{"zone": "a"}); err != nil {
t.Fatalf("DeleteAllOf: %v", err)
}
var got v1alpha1.Reservation
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-1"}, &got); !apierrors.IsNotFound(err) {
t.Fatalf("expected NotFound for tombstoned res-dao-1, got %v", err)
}
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-2"}, &got); err != nil {
t.Fatalf("res-dao-2 should still be visible, got %v", err)
}
}
func TestDeleteAllOf(t *testing.T) {
r1 := newReservation("res-dao-1", "az-1", "1")
r1.Labels = map[string]string{"zone": "a"}
r2 := newReservation("res-dao-2", "az-2", "1")
r2.Labels = map[string]string{"zone": "b"}
inner := newTestClient(t, r1, r2)
c := newCaching(t, inner)
// Populate overlay for both so we can verify tombstoning.
c.upsert(reservationGVK(), r1)
c.upsert(reservationGVK(), r2)
// DeleteAllOf with a label selector — only r1 should be tombstoned.
if err := c.DeleteAllOf(context.Background(), &v1alpha1.Reservation{}, client.MatchingLabels{"zone": "a"}); err != nil {
t.Fatalf("DeleteAllOf: %v", err)
}
// Re-create directly in inner to simulate informer lag; only the tombstone
// can hide the object now.
if err := inner.Create(context.Background(), newReservation("res-dao-1", "az-1", "")); err != nil {
t.Fatalf("re-create inner: %v", err)
}
var got v1alpha1.Reservation
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-1"}, &got); !apierrors.IsNotFound(err) {
t.Fatalf("expected NotFound for tombstoned res-dao-1, got %v", err)
}
if err := c.Get(context.Background(), types.NamespacedName{Name: "res-dao-2"}, &got); err != nil {
t.Fatalf("res-dao-2 should still be visible, got %v", err)
}
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/client_test.go` around lines 438 - 462, Update
TestDeleteAllOf after the DeleteAllOf call to recreate res-dao-1 directly in the
inner client, using the same approach as TestTombstone, before calling c.Get.
Keep the existing assertions so the NotFound result verifies the cache tombstone
rather than deletion from the underlying client.

Comment thread pkg/clientcache/client.go
Comment on lines +425 to +438
// fieldSetLocked builds a fields.Set for obj using the registered IndexerFuncs
// for the GVK. Callers must hold at least the read lock.
func (c *CachingClient) fieldSetLocked(gvk schema.GroupVersionKind, obj client.Object) fields.Set {
set := fields.Set{}
for field, fn := range c.indexers[gvk] {
for _, v := range fn(obj) {
// A field selector matches a single value; take the first indexed
// value for the field (mirrors controller-runtime cache behaviour).
set[field] = v
break
}
}
return set
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

fieldSetLocked drops all but the first indexed value.

An IndexerFunc can return several values. fields.Set is a map[string]string, so only one value survives, and a MatchingFields query on any other value returns no match for overlay entries. The controller-runtime cache matches if any indexed value equals the requested value, so the comment on Line 431 does not describe the real behaviour.

The registered index in internal/scheduling/reservations/inflight/controller.go returns at most one value today, so this is not reachable yet. Consider matching per-field against every indexed value instead of building a single fields.Set.

🐛 Proposed change
-	if lo.FieldSelector != nil && !lo.FieldSelector.Empty() {
-		set := c.fieldSetLocked(gvk, obj)
-		if !lo.FieldSelector.Matches(set) {
-			return false
-		}
-	}
+	if lo.FieldSelector != nil && !lo.FieldSelector.Empty() {
+		if !c.matchesFieldSelectorLocked(gvk, obj, lo.FieldSelector) {
+			return false
+		}
+	}
// matchesFieldSelectorLocked reports whether obj satisfies every requirement of
// sel. A field matches when any value produced by its IndexerFunc matches.
// Callers must hold at least the read lock.
func (c *CachingClient) matchesFieldSelectorLocked(gvk schema.GroupVersionKind, obj client.Object, sel fields.Selector) bool {
	for _, req := range sel.Requirements() {
		fn, ok := c.indexers[gvk][req.Field]
		if !ok {
			return false
		}
		matched := false
		for _, v := range fn(obj) {
			if sel.Matches(fields.Set{req.Field: v}) {
				matched = true
				break
			}
		}
		if !matched {
			return false
		}
	}
	return true
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/client.go` around lines 425 - 438, Replace the single-value
fieldSetLocked matching flow with per-requirement matching, using a
matchesFieldSelectorLocked helper. For each selector requirement, evaluate every
value returned by the registered indexer and accept the object when any value
satisfies that requirement; require all requirements to match and return false
when the indexer is missing or no value matches. Remove the first-value-only
behavior and update callers to use the new helper.

Comment thread pkg/clientcache/client.go
Comment on lines +512 to +537
func (c *CachingClient) DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error {
gvk, cached := c.gvkFor(obj)
if !cached {
return c.Client.DeleteAllOf(ctx, obj, opts...)
}
if err := c.Client.DeleteAllOf(ctx, obj, opts...); err != nil {
return err
}
dao := &client.DeleteAllOfOptions{}
dao.ApplyOptions(opts)
c.mu.Lock()
defer c.mu.Unlock()
for key, e := range c.byGVK[gvk] {
if !c.matchesLocked(gvk, e.obj, &dao.ListOptions) {
continue
}
c.byGVK[gvk][key] = &entry{
obj: e.obj,
uid: e.uid,
resourceVersion: e.resourceVersion,
deleted: true,
expiresAt: time.Now().Add(c.ttl),
}
}
return nil
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

DeleteAllOf does not take the per-object write lock.

Create, Update, Patch, and Delete hold writeLocks across the inner call and the overlay mutation. DeleteAllOf skips that lock. A concurrent Update on a matching object can commit to the apiserver first, then DeleteAllOf deletes it, and then the Update goroutine runs c.upsert and re-adds a live overlay entry for an object that no longer exists. Reads then serve the deleted object until the TTL expires or an informer delete event arrives. This is the same ordering hazard that writeLocks and TestConcurrentUpdatesOverlayNotBehind were added to prevent.

DeleteAllOf cannot know the affected keys before the inner call, so a per-object lock does not fit. A package-level sync.RWMutex works: per-object writers take it in read mode, DeleteAllOf takes it in write mode.

🛡️ Sketch of a guard
 type CachingClient struct {
 	...
 	writeLocks *keyedMutex
+	// bulkLock excludes DeleteAllOf from all single-object writes. Single-object
+	// writers hold it in read mode; DeleteAllOf holds it in write mode.
+	bulkLock sync.RWMutex
 }
 func (c *CachingClient) DeleteAllOf(ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption) error {
 	gvk, cached := c.gvkFor(obj)
 	if !cached {
 		return c.Client.DeleteAllOf(ctx, obj, opts...)
 	}
+	c.bulkLock.Lock()
+	defer c.bulkLock.Unlock()
 	if err := c.Client.DeleteAllOf(ctx, obj, opts...); err != nil {

Each single-object write path then adds c.bulkLock.RLock() / defer c.bulkLock.RUnlock() next to the existing writeLocks.lock call.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/clientcache/client.go` around lines 512 - 537, Protect DeleteAllOf and
single-object write paths with a package-level sync.RWMutex: add a bulkLock
field to CachingClient, acquire bulkLock.RLock() alongside the existing
writeLocks lock in Create, Update, Patch, and Delete, and acquire
bulkLock.Lock() across the inner DeleteAllOf call and overlay mutation in
DeleteAllOf. Preserve the existing per-object locking and cleanup behavior.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants